/*
    1、第一次实现，用了 2CLKs - 5(10) mins
    其实中间还是多了一些过多分析性能的问题

    2、第一次运行，错了，因为丢了最后一个数值；

    总结：
    1、这是最直接粗暴的解法，没进行算法效率考虑；
    2、暂时认为这是不需要排序的；
       题目有点不明所以；
    
    但无所谓，排序的问题，另外考虑；
*/
#include <stdlib.h>

int Func1(int *A,int nSize);

int Func(int *A,int nSize)
{
    Func1(A,nSize);
}

// 输入异常时，返回-1；
// 未找到0，返回 -2;    —— 根据题目，上述两种情况都不存在，但仍要保护程序不会引起异常
int Func1(int *A,int nSize)
{
    int last_pos = -1;
    int next = 0;

    if(NULL == A)
        return -1;

    if(nSize <= 0)
        return -1;
    
    while(next < nSize)         // 差1 原因出在这里
    {
        if(0 == A[next])
            next++;
        else
        {
            last_pos++;
            if(last_pos != next)
                A[last_pos] = A[next];
            next++;
        }
    }

    if(last_pos != next)
    {
        while(last_pos < next)      // !
        {
            last_pos++;
            A[last_pos] = 0;      
        }
    }
}

// test
void test_Func(int *A,int nSize)
{
    int i;
    
    printf("before:\n");
    for(i = 0;i < nSize;i++)
    {
        printf("%d\t",A[i]);
        if( 0x0F == (i % 0x0F) )
            printf("|\n");
    }
    printf("\n");

    Func(A,nSize);

    printf("after:\n");
    for(i = 0;i < nSize;i++)
    {
        printf("%d\t",A[i]);
        if( 0x0F == (i % 0x0F) )
            printf("|\n");
    }
    printf("\n");    
}

// end of file ----------------------------------------------------------------
